@@ -2,6 +2,8 @@  | 
            ||
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from __future__ import division  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 
                +from datetime import datetime  | 
            |
| 6 | 
                +  | 
            |
| 5 | 7 | 
                from django.conf import settings  | 
            
| 6 | 8 | 
                from django_logit import logit  | 
            
| 7 | 9 | 
                from django_response import response  | 
            
                @@ -21,21 +23,27 @@ def lensman_list(request, administrator):  | 
            ||
| 21 | 23 | 
                     query = request.POST.get('query', '')
               | 
            
| 22 | 24 | 
                     lensman_status = request.POST.get('lensman_status', '')
               | 
            
| 23 | 25 | 
                     end_date = tc.to_date(request.POST.get('end_date', ''))
               | 
            
| 24 | 
                -    integral_end_date = tc.to_date(request.POST.get('integral_end_date', ''))
               | 
            |
| 26 | 
                +    integral_end_date_start = request.POST.get('integral_end_date_start', '')
               | 
            |
| 27 | 
                +    integral_end_date_end = request.POST.get('integral_end_date_end', '')
               | 
            |
| 25 | 28 | 
                 | 
            
| 26 | 29 | 
                     logs = LensmanInfo.objects.filter(status=True).order_by('-pk')
               | 
            
| 27 | 30 | 
                 | 
            
| 28 | 31 | 
                if query:  | 
            
| 29 | 
                - logs = logs.filter(Q(name__icontains=query) | Q(phone__icontains=query))  | 
            |
| 30 | 
                -  | 
            |
| 32 | 
                + logs = logs.filter(Q(name__icontains=query) |  | 
            |
| 33 | 
                + Q(phone__icontains=query))  | 
            |
| 34 | 
                +  | 
            |
| 31 | 35 | 
                if lensman_status:  | 
            
| 32 | 
                - logs = logs.filter(lensman_status=lensman_status)  | 
            |
| 33 | 
                -  | 
            |
| 36 | 
                + logs = logs.filter(lensman_status=lensman_status)  | 
            |
| 37 | 
                +  | 
            |
| 34 | 38 | 
                if end_date:  | 
            
| 35 | 
                - logs = logs.filter(end_date__lte=end_date)  | 
            |
| 36 | 
                -  | 
            |
| 37 | 
                - if integral_end_date:  | 
            |
| 38 | 
                - logs = logs.filter(integral_end_date__lte=integral_end_date)  | 
            |
| 39 | 
                + logs = logs.filter(end_date__lte=end_date)  | 
            |
| 40 | 
                +  | 
            |
| 41 | 
                + if integral_end_date_start and integral_end_date_end:  | 
            |
| 42 | 
                + ftime = datetime.strptime(  | 
            |
| 43 | 
                + integral_end_date_start + ' 00:00:00', '%Y%m%d %H:%M:%S')  | 
            |
| 44 | 
                + ttime = datetime.strptime(  | 
            |
| 45 | 
                + integral_end_date_end + ' 23:59:59', '%Y%m%d %H:%M:%S')  | 
            |
| 46 | 
                + logs = logs.filter(integral_end_date__range=[ftime, ttime])  | 
            |
| 39 | 47 | 
                 | 
            
| 40 | 48 | 
                count = logs.count()  | 
            
| 41 | 49 | 
                logs, left = pagination(logs, page, num)  | 
            
                @@ -56,10 +64,10 @@ def lensman_audit(request, administrator):  | 
            ||
| 56 | 64 | 
                     end_date = tc.to_date(request.POST.get('end_date', ''))
               | 
            
| 57 | 65 | 
                 | 
            
| 58 | 66 | 
                try:  | 
            
| 59 | 
                - lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)  | 
            |
| 67 | 
                + lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)  | 
            |
| 60 | 68 | 
                except LensmanInfo.DoesNotExist:  | 
            
| 61 | 
                - return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 62 | 
                -  | 
            |
| 69 | 
                + return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 70 | 
                +  | 
            |
| 63 | 71 | 
                lensman.lensman_status = LensmanInfo.ACTIVATED  | 
            
| 64 | 72 | 
                lensman.start_date = start_date  | 
            
| 65 | 73 | 
                lensman.end_date = end_date  | 
            
                @@ -75,17 +83,18 @@ def lensman_update(request, administrator):  | 
            ||
| 75 | 83 | 
                     lensman_id = request.POST.get('lensman_id', '')
               | 
            
| 76 | 84 | 
                     start_date = tc.to_date(request.POST.get('start_date', ''))
               | 
            
| 77 | 85 | 
                     end_date = tc.to_date(request.POST.get('end_date', ''))
               | 
            
| 78 | 
                -    integral_start_date = tc.to_date(request.POST.get('integral_start_date', ''))
               | 
            |
| 86 | 
                + integral_start_date = tc.to_date(  | 
            |
| 87 | 
                +        request.POST.get('integral_start_date', ''))
               | 
            |
| 79 | 88 | 
                     integral_end_date = tc.to_date(request.POST.get('integral_end_date', ''))
               | 
            
| 80 | 89 | 
                     name = request.POST.get('name', '')
               | 
            
| 81 | 90 | 
                     phone = request.POST.get('phone', '')
               | 
            
| 82 | 91 | 
                     remark = request.POST.get('remark', '')
               | 
            
| 83 | 
                -  | 
            |
| 92 | 
                +  | 
            |
| 84 | 93 | 
                try:  | 
            
| 85 | 
                - lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)  | 
            |
| 94 | 
                + lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)  | 
            |
| 86 | 95 | 
                except LensmanInfo.DoesNotExist:  | 
            
| 87 | 
                - return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 88 | 
                -  | 
            |
| 96 | 
                + return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 97 | 
                +  | 
            |
| 89 | 98 | 
                lensman.start_date = start_date  | 
            
| 90 | 99 | 
                lensman.end_date = end_date  | 
            
| 91 | 100 | 
                lensman.integral_start_date = integral_start_date  | 
            
                @@ -102,19 +111,19 @@ def lensman_update(request, administrator):  | 
            ||
| 102 | 111 | 
                @logit  | 
            
| 103 | 112 | 
                @check_admin  | 
            
| 104 | 113 | 
                def lensman_integral_list(request, administrator):  | 
            
| 105 | 
                -  user_id = request.POST.get('user_id', '')
               | 
            |
| 114 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 115 | 
                +  | 
            |
| 116 | 
                + try:  | 
            |
| 117 | 
                + lensman = LensmanInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 118 | 
                + except LensmanInfo.DoesNotExist:  | 
            |
| 119 | 
                + return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 106 | 120 | 
                 | 
            
| 107 | 
                - try:  | 
            |
| 108 | 
                - lensman = LensmanInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 109 | 
                - except LensmanInfo.DoesNotExist:  | 
            |
| 110 | 
                - return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 111 | 
                -  | 
            |
| 112 | 
                - integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(user_id=user_id, status=True)  | 
            |
| 121 | 
                + integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(  | 
            |
| 122 | 
                + user_id=user_id, status=True)  | 
            |
| 113 | 123 | 
                 | 
            
| 114 | 
                - integrals = [integral.admindata for integral in integrals]  | 
            |
| 115 | 
                -  | 
            |
| 124 | 
                + integrals = [integral.admindata for integral in integrals]  | 
            |
| 116 | 125 | 
                 | 
            
| 117 | 
                - return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals)  | 
            |
| 126 | 
                + return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals)  | 
            |
| 118 | 127 | 
                 | 
            
| 119 | 128 | 
                 | 
            
| 120 | 129 | 
                @logit  | 
            
                @@ -125,20 +134,19 @@ def lensman_integral_update(request):  | 
            ||
| 125 | 134 | 
                     brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
               | 
            
| 126 | 135 | 
                 | 
            
| 127 | 136 | 
                try:  | 
            
| 128 | 
                - lensman = LensmanInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 137 | 
                + lensman = LensmanInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 129 | 138 | 
                except LensmanInfo.DoesNotExist:  | 
            
| 130 | 
                - return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 131 | 
                -  | 
            |
| 139 | 
                + return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 140 | 
                +  | 
            |
| 132 | 141 | 
                lensman.integral += integral  | 
            
| 133 | 142 | 
                lensman.save()  | 
            
| 134 | 
                -  | 
            |
| 143 | 
                +  | 
            |
| 135 | 144 | 
                LensmanIntegralIncomeExpensesInfo.objects.create(  | 
            
| 136 | 
                - brand_id=brand_id,  | 
            |
| 137 | 
                - user_id=user_id,  | 
            |
| 138 | 
                - integral=integral,  | 
            |
| 139 | 
                - remark=remark,  | 
            |
| 140 | 
                - expired_at=lensman.integral_end_date,  | 
            |
| 145 | 
                + brand_id=brand_id,  | 
            |
| 146 | 
                + user_id=user_id,  | 
            |
| 147 | 
                + integral=integral,  | 
            |
| 148 | 
                + remark=remark,  | 
            |
| 149 | 
                + expired_at=lensman.integral_end_date,  | 
            |
| 141 | 150 | 
                )  | 
            
| 142 | 151 | 
                 | 
            
| 143 | 152 | 
                return response(200, 'Lensman Integral Update Success', u'摄影师积分更新成功')  | 
            
| 144 | 
                -  | 
            
                @@ -16,17 +16,28 @@ class TenancyShotInfo(BaseModelMixin):  | 
            ||
| 16 | 16 | 
                (1, u'已租'),  | 
            
| 17 | 17 | 
                )  | 
            
| 18 | 18 | 
                 | 
            
| 19 | 
                - admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)  | 
            |
| 20 | 
                - shot_id = ShortUUIDField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True, unique=True)  | 
            |
| 21 | 
                - model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)  | 
            |
| 22 | 
                - model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')  | 
            |
| 23 | 
                - sn = models.CharField(_(u'sn'), max_length=32, blank=True, null=True, help_text=u'序列号', db_index=True)  | 
            |
| 24 | 
                - front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态')  | 
            |
| 25 | 
                - rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态')  | 
            |
| 26 | 
                - lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')  | 
            |
| 27 | 
                - tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')  | 
            |
| 28 | 
                - appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')  | 
            |
| 29 | 
                - tenancy_status = models.IntegerField(_(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态')  | 
            |
| 19 | 
                + admin_id = models.CharField(_(u'admin_id'), max_length=32,  | 
            |
| 20 | 
                + blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)  | 
            |
| 21 | 
                + shot_id = ShortUUIDField(_(u'shot_id'), max_length=32, blank=True,  | 
            |
| 22 | 
                + null=True, help_text=u'镜头唯一标识', db_index=True, unique=True)  | 
            |
| 23 | 
                + model_id = models.CharField(_(u'model_id'), max_length=32,  | 
            |
| 24 | 
                + blank=True, null=True, help_text=u'型号唯一标识', db_index=True)  | 
            |
| 25 | 
                + model_name = models.CharField(  | 
            |
| 26 | 
                + _(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')  | 
            |
| 27 | 
                + sn = models.CharField(_(u'sn'), max_length=32, blank=True,  | 
            |
| 28 | 
                + null=True, help_text=u'序列号', db_index=True)  | 
            |
| 29 | 
                + front_cap_status = models.BooleanField(  | 
            |
| 30 | 
                + _(u'front_cap_status'), default=False, help_text=u'前盖状态')  | 
            |
| 31 | 
                + rear_cap_status = models.BooleanField(  | 
            |
| 32 | 
                + _(u'rear_cap_status'), default=False, help_text=u'后盖状态')  | 
            |
| 33 | 
                + lens_hood_status = models.BooleanField(  | 
            |
| 34 | 
                + _(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')  | 
            |
| 35 | 
                + tripod_ring_status = models.BooleanField(  | 
            |
| 36 | 
                + _(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')  | 
            |
| 37 | 
                + appearance_performance_status = models.BooleanField(  | 
            |
| 38 | 
                + _(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')  | 
            |
| 39 | 
                + tenancy_status = models.IntegerField(  | 
            |
| 40 | 
                + _(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态')  | 
            |
| 30 | 41 | 
                 | 
            
| 31 | 42 | 
                class Meta:  | 
            
| 32 | 43 | 
                verbose_name = _(u'租赁镜头信息')  | 
            
                @@ -70,53 +81,84 @@ class TenancyShotRequestInfo(BaseModelMixin):  | 
            ||
| 70 | 81 | 
                (2, u'未通过'),  | 
            
| 71 | 82 | 
                )  | 
            
| 72 | 83 | 
                 | 
            
| 73 | 
                - request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True, null=True, help_text=u'申请唯一标识', db_index=True, unique=True)  | 
            |
| 74 | 
                - admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)  | 
            |
| 84 | 
                + request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True,  | 
            |
| 85 | 
                + null=True, help_text=u'申请唯一标识', db_index=True, unique=True)  | 
            |
| 86 | 
                + admin_id = models.CharField(_(u'admin_id'), max_length=32,  | 
            |
| 87 | 
                + blank=True, null=True, help_text=u'经手人唯一标识', db_index=True)  | 
            |
| 75 | 88 | 
                 | 
            
| 76 | 
                - request_number = models.CharField(_(u'request_number'), max_length=32, blank=True, null=True, help_text=u'线下借单编号', db_index=True)  | 
            |
| 89 | 
                + request_number = models.CharField(  | 
            |
| 90 | 
                + _(u'request_number'), max_length=32, blank=True, null=True, help_text=u'线下借单编号', db_index=True)  | 
            |
| 77 | 91 | 
                 | 
            
| 78 | 
                - shot_id = models.CharField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True)  | 
            |
| 79 | 
                - model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'镜头型号唯一标识', db_index=True)  | 
            |
| 92 | 
                + shot_id = models.CharField(_(u'shot_id'), max_length=32,  | 
            |
| 93 | 
                + blank=True, null=True, help_text=u'镜头唯一标识', db_index=True)  | 
            |
| 94 | 
                + model_id = models.CharField(_(u'model_id'), max_length=32,  | 
            |
| 95 | 
                + blank=True, null=True, help_text=u'镜头型号唯一标识', db_index=True)  | 
            |
| 80 | 96 | 
                 | 
            
| 81 | 
                - user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            |
| 97 | 
                + user_id = models.CharField(_(u'user_id'), max_length=32,  | 
            |
| 98 | 
                + blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            |
| 82 | 99 | 
                 | 
            
| 83 | 100 | 
                # 镜头配件信息  | 
            
| 84 | 
                - front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态')  | 
            |
| 85 | 
                - rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态')  | 
            |
| 86 | 
                - lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')  | 
            |
| 87 | 
                - tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')  | 
            |
| 88 | 
                - appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')  | 
            |
| 101 | 
                + front_cap_status = models.BooleanField(  | 
            |
| 102 | 
                + _(u'front_cap_status'), default=False, help_text=u'前盖状态')  | 
            |
| 103 | 
                + rear_cap_status = models.BooleanField(  | 
            |
| 104 | 
                + _(u'rear_cap_status'), default=False, help_text=u'后盖状态')  | 
            |
| 105 | 
                + lens_hood_status = models.BooleanField(  | 
            |
| 106 | 
                + _(u'lens_hood_status'), default=False, help_text=u'遮光罩状态')  | 
            |
| 107 | 
                + tripod_ring_status = models.BooleanField(  | 
            |
| 108 | 
                + _(u'tripod_ring_status'), default=False, help_text=u'脚架环状态')  | 
            |
| 109 | 
                + appearance_performance_status = models.BooleanField(  | 
            |
| 110 | 
                + _(u'appearance_performance_status'), default=False, help_text=u'外观性能状态')  | 
            |
| 89 | 111 | 
                 | 
            
| 90 | 112 | 
                # 身份证信息  | 
            
| 91 | 
                - identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号')  | 
            |
| 92 | 
                - identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名')  | 
            |
| 113 | 
                + identity_card_number = models.CharField(  | 
            |
| 114 | 
                + _(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号')  | 
            |
| 115 | 
                + identity_card_name = models.CharField(  | 
            |
| 116 | 
                + _(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名')  | 
            |
| 93 | 117 | 
                 | 
            
| 94 | 118 | 
                # 邮寄信息  | 
            
| 95 | 
                - name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名')  | 
            |
| 96 | 
                - phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户电话')  | 
            |
| 97 | 
                - location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')  | 
            |
| 98 | 
                - postcode = models.CharField(_(u'postcode'), max_length=255, blank=True, null=True, help_text=u'用户邮政编码')  | 
            |
| 119 | 
                + name = models.CharField(_(u'name'), max_length=255,  | 
            |
| 120 | 
                + blank=True, null=True, help_text=u'用户姓名')  | 
            |
| 121 | 
                + phone = models.CharField(_(u'phone'), max_length=11,  | 
            |
| 122 | 
                + blank=True, null=True, help_text=u'用户电话')  | 
            |
| 123 | 
                + location = models.CharField(  | 
            |
| 124 | 
                + _(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址')  | 
            |
| 125 | 
                + postcode = models.CharField(  | 
            |
| 126 | 
                + _(u'postcode'), max_length=255, blank=True, null=True, help_text=u'用户邮政编码')  | 
            |
| 99 | 127 | 
                 | 
            
| 100 | 128 | 
                # 租赁信息  | 
            
| 101 | 
                - purpose = models.CharField(_(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途')  | 
            |
| 102 | 
                - return_date = models.DateField(_(u'return_date'), blank=True, null=True, help_text=u'预定归还日期')  | 
            |
| 129 | 
                + purpose = models.CharField(  | 
            |
| 130 | 
                + _(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途')  | 
            |
| 131 | 
                + return_date = models.DateField(  | 
            |
| 132 | 
                + _(u'return_date'), blank=True, null=True, help_text=u'预定归还日期')  | 
            |
| 103 | 133 | 
                 | 
            
| 104 | 134 | 
                # 公司 =》 用户  | 
            
| 105 | 
                - express_name = models.CharField(_(u'express_name'), max_length=255, blank=True, null=True, help_text=u'快递公司')  | 
            |
| 106 | 
                - express_com = models.CharField(_(u'express_com'), max_length=255, blank=True, null=True, help_text=u'快递编码')  | 
            |
| 107 | 
                - tracking_number = models.CharField(_(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号')  | 
            |
| 108 | 
                -    tracking_info = JSONField(_(u'tracking_info'), blank=True, null=True, default={}, help_text=u'快递信息')
               | 
            |
| 109 | 
                - tracking_signed = models.BooleanField(_(u'tracking_signed'), default=False, help_text=u'快递是否已签收')  | 
            |
| 110 | 
                - tracking_signed_images = JSONField(_(u'tracking_signed_images'), blank=True, null=True, default=[], help_text=u'快递签收图片列表')  | 
            |
| 135 | 
                + express_name = models.CharField(  | 
            |
| 136 | 
                + _(u'express_name'), max_length=255, blank=True, null=True, help_text=u'快递公司')  | 
            |
| 137 | 
                + express_com = models.CharField(  | 
            |
| 138 | 
                + _(u'express_com'), max_length=255, blank=True, null=True, help_text=u'快递编码')  | 
            |
| 139 | 
                + tracking_number = models.CharField(  | 
            |
| 140 | 
                + _(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号')  | 
            |
| 141 | 
                + tracking_info = JSONField(  | 
            |
| 142 | 
                +        _(u'tracking_info'), blank=True, null=True, default={}, help_text=u'快递信息')
               | 
            |
| 143 | 
                + tracking_signed = models.BooleanField(  | 
            |
| 144 | 
                + _(u'tracking_signed'), default=False, help_text=u'快递是否已签收')  | 
            |
| 145 | 
                + tracking_signed_images = JSONField(  | 
            |
| 146 | 
                + _(u'tracking_signed_images'), blank=True, null=True, default=[], help_text=u'快递签收图片列表')  | 
            |
| 111 | 147 | 
                 | 
            
| 112 | 148 | 
                # 用户 =》 公司  | 
            
| 113 | 
                - back_express_name = models.CharField(_(u'back_express_name'), max_length=255, blank=True, null=True, help_text=u'寄回快递公司')  | 
            |
| 114 | 
                - back_express_com = models.CharField(_(u'back_express_com'), max_length=255, blank=True, null=True, help_text=u'寄回快递编码')  | 
            |
| 115 | 
                - back_tracking_number = models.CharField(_(u'back_tracking_number'), max_length=255, blank=True, null=True, help_text=u'寄回快递单号')  | 
            |
| 116 | 
                -    back_tracking_info = JSONField(_(u'back_tracking_info'), blank=True, null=True, default={}, help_text=u'寄回快递信息')
               | 
            |
| 117 | 
                - back_tracking_signed = models.BooleanField(_(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收')  | 
            |
| 118 | 
                -  | 
            |
| 119 | 
                - audit_status = models.IntegerField(_(u'audit_status'), choices=AUDIT_STATUS, default=0, help_text=u'审批状态', db_index=True)  | 
            |
| 149 | 
                + back_express_name = models.CharField(  | 
            |
| 150 | 
                + _(u'back_express_name'), max_length=255, blank=True, null=True, help_text=u'寄回快递公司')  | 
            |
| 151 | 
                + back_express_com = models.CharField(  | 
            |
| 152 | 
                + _(u'back_express_com'), max_length=255, blank=True, null=True, help_text=u'寄回快递编码')  | 
            |
| 153 | 
                + back_tracking_number = models.CharField(  | 
            |
| 154 | 
                + _(u'back_tracking_number'), max_length=255, blank=True, null=True, help_text=u'寄回快递单号')  | 
            |
| 155 | 
                + back_tracking_info = JSONField(  | 
            |
| 156 | 
                +        _(u'back_tracking_info'), blank=True, null=True, default={}, help_text=u'寄回快递信息')
               | 
            |
| 157 | 
                + back_tracking_signed = models.BooleanField(  | 
            |
| 158 | 
                + _(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收')  | 
            |
| 159 | 
                +  | 
            |
| 160 | 
                + audit_status = models.IntegerField(  | 
            |
| 161 | 
                + _(u'audit_status'), choices=AUDIT_STATUS, default=0, help_text=u'审批状态', db_index=True)  | 
            |
| 120 | 162 | 
                # REQUEST_STATUS = (  | 
            
| 121 | 163 | 
                # (0, u'寄出'),  | 
            
| 122 | 164 | 
                # (1, u'寄出已签收'),  | 
            
                @@ -124,10 +166,13 @@ class TenancyShotRequestInfo(BaseModelMixin):  | 
            ||
| 124 | 166 | 
                # (3, u'寄回已签收并检查无损坏'),  | 
            
| 125 | 167 | 
                # )  | 
            
| 126 | 168 | 
                # request_status = models.IntegerField(_(u'request_status'), choices=REQUEST_STATUS, default=0, help_text=u'租借申请状态')  | 
            
| 127 | 
                - request_status = models.CharField(_(u'request_status'), max_length=16, default='', help_text=u'租借申请状态')  | 
            |
| 128 | 
                -    request_status_at = JSONField(_(u'request_status_at'), blank=True, null=True, default={}, help_text=u'租借申请状态变更时间')
               | 
            |
| 169 | 
                + request_status = models.CharField(  | 
            |
| 170 | 
                + _(u'request_status'), max_length=16, default='', help_text=u'租借申请状态')  | 
            |
| 171 | 
                + request_status_at = JSONField(  | 
            |
| 172 | 
                +        _(u'request_status_at'), blank=True, null=True, default={}, help_text=u'租借申请状态变更时间')
               | 
            |
| 129 | 173 | 
                 | 
            
| 130 | 
                - remark = models.CharField(_(u'remark'), max_length=256, default='', help_text=u'备注')  | 
            |
| 174 | 
                + remark = models.CharField(  | 
            |
| 175 | 
                + _(u'remark'), max_length=256, default='', help_text=u'备注')  | 
            |
| 131 | 176 | 
                 | 
            
| 132 | 177 | 
                class Meta:  | 
            
| 133 | 178 | 
                verbose_name = _(u'租赁镜头申请信息')  | 
            
                @@ -185,7 +230,7 @@ class TenancyShotRequestInfo(BaseModelMixin):  | 
            ||
| 185 | 230 | 
                'back_tracking_signed': self.back_tracking_signed,  | 
            
| 186 | 231 | 
                'audit_status': self.audit_status,  | 
            
| 187 | 232 | 
                'request_status': self.request_status,  | 
            
| 188 | 
                -            'request_status_at': {k: tc.local_date_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%dT%H:%M:%S.%fZ')) for k, v in self.request_status_at.items()},
               | 
            |
| 233 | 
                +            'request_status_at': {k: tc.local_date_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%d %H:%M:%S')) for k, v in self.request_status_at.items()},
               | 
            |
| 189 | 234 | 
                'created_at': tc.local_date_string(utc_dt=self.created_at),  | 
            
| 190 | 235 | 
                'remark': self.remark,  | 
            
| 191 | 236 | 
                }  | 
            
                @@ -198,7 +243,8 @@ class TenancyShotRequestInfo(BaseModelMixin):  | 
            ||
| 198 | 243 | 
                admin = None  | 
            
| 199 | 244 | 
                 | 
            
| 200 | 245 | 
                try:  | 
            
| 201 | 
                - shot = TenancyShotInfo.objects.get(shot_id=self.shot_id, status=True)  | 
            |
| 246 | 
                + shot = TenancyShotInfo.objects.get(  | 
            |
| 247 | 
                + shot_id=self.shot_id, status=True)  | 
            |
| 202 | 248 | 
                except TenancyShotInfo.DoesNotExist:  | 
            
| 203 | 249 | 
                shot = None  | 
            
| 204 | 250 | 
                 |